home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / front.lha / front / src / TokenTab.md < prev    next >
Text File  |  1992-08-18  |  4KB  |  131 lines

  1. (* map tokens to internal representation *)
  2.  
  3. (* $Id: TokenTab.md,v 1.5 1992/08/07 15:13:51 grosch rel $ *)
  4.  
  5. (* $Log: TokenTab.md,v $
  6.  * Revision 1.5  1992/08/07  15:13:51  grosch
  7.  * allow several scanner and parsers; extend module Errors
  8.  *
  9.  * Revision 1.4  1991/11/21  14:47:50  grosch
  10.  * new version of RCS on SPARC
  11.  *
  12.  * Revision 1.3  91/10/11  16:30:47  grosch
  13.  * increased cMAXNonTerm from 1023 to 2047
  14.  * 
  15.  * Revision 1.2  90/06/11  18:45:43  grosch
  16.  * layout improvements
  17.  * 
  18.  * Revision 1.1     89/01/26  19:03:21  vielsack
  19.  * better position handling for nonterminals
  20.  * 
  21.  * Revision 1.0     88/10/04  14:27:22  vielsack
  22.  * Initial revision
  23.  * 
  24.  *)
  25.  
  26. DEFINITION MODULE TokenTab;
  27.  
  28. FROM Strings    IMPORT tString;
  29. FROM SYSTEM    IMPORT ADDRESS;
  30. FROM Idents    IMPORT tIdent;
  31. FROM Positions    IMPORT tPosition;
  32.  
  33.   CONST
  34.     MINTerm    = 0;
  35.     cMAXTerm    = 1000;
  36.     MINNonTerm    = cMAXTerm + 1;
  37.     cMAXNonTerm = 2500;
  38.     EndOfToken    = 0;
  39.  
  40.   VAR
  41.     MAXTerm    : SHORTCARD;   (* tatsaechlich belegte Groesse *) (* read only *)
  42.     MAXNonTerm    : SHORTCARD;
  43.  
  44.   TYPE
  45.     PosType    = tPosition;
  46.     TokenType    = (Term, NonTerm, None);
  47.     NonTerminal = SHORTCARD [MINNonTerm..cMAXNonTerm];
  48.     Vocabulary    = SHORTCARD [0..cMAXNonTerm+2];
  49.     Terminal    = SHORTCARD [0..cMAXTerm];
  50.     Prio    = SHORTCARD;
  51.     TokenError    = (NoError, SymbolExists, CodeExists, OutOfRange, NotExists,NoIntCode,NotTerm);
  52.  
  53. PROCEDURE MakeTerm (sym: tIdent; VAR ter: Terminal; VAR Error: TokenError; pos: PosType);
  54.   
  55.   (* Fuege 'sym' als NEUES Terminal in TokenTab mit vorgegebener Codierung
  56.      'ter' ein. Falls 'sym' bereits in der TokenTab steht, wird der alte Code
  57.      zurueckgeliefert und Error auf StringExists gesetzt.
  58.      Error = OutOfRange ,falls voc ausserhalb des fuer Terminals
  59.      zulaessigen Bereichs ist
  60.      Error = CodeExists, falls der angegebene Code bereits vergeben ist . *)
  61.       
  62. PROCEDURE MakeDefTerm (VAR sym: tIdent; VAR Error: TokenError; pos: PosType);
  63.  
  64.   (* Fuege s als NEUES Terminal in TokenTab ohne interne Codierung
  65.      ein. Die Codierung muss nach Abschluss aller Eintraege in die
  66.      TokenTab mit CompleteDefTerm nachgeholt werden. 
  67.      Falls s bereits in der TokenTab steht, wird der alte Code zurueck-
  68.      geliefert und Error auf StringExists gesetzt. *)
  69.  
  70. PROCEDURE CompleteDefTerm (sym: tIdent; VAR Error: TokenError);
  71.  
  72.   (* Traegt die interne Codierung fuer bereits mit MakeDefTerm eingetragene
  73.      Terminale nach und liefert ihren Wert zurueck.Moegliche Fehler:
  74.      Error = NotExists       Noch gar nicht eingetragen
  75.          CodeExists       Schon vollstaendig eingetragen
  76.          TokenOverflow Ueberlauf: zu viele Tokens;
  77.          NonTerm   sym ist Codierung fuer Nichtterminal; *)
  78.   
  79. PROCEDURE MakeVoc (sym: tIdent; symPos: PosType): Vocabulary;
  80.  
  81.   (* falls sym bereits vorhanden:
  82.     die Codierung von sym wird zurueckgeliefert
  83.      sonst:
  84.     sym wird als NichtTerminal in die TokenTab eingetragen und die
  85.     Codierung zurueckgeliefert. *)
  86.  
  87. PROCEDURE SetNontermPos (sym: tIdent; pos: PosType);
  88.  
  89.   (* setze Position eines Nichtterminals *)
  90.  
  91. PROCEDURE GetTokenType (voc: Vocabulary): TokenType;
  92.  
  93.   (* liefert den Typ des Tokens voc zurueck *)
  94.  
  95. PROCEDURE SymbolToToken (sym: tIdent; VAR Error: TokenError): Vocabulary;
  96.   
  97.   (* liefert die zum SymboltabellenEintrag sym gehoerige interne Darstellung*)
  98.   (* Moegliche Fehler:
  99.      Error = NotExists      Es existiert ueberhaupt kein Eintrag
  100.      Error = NoIntCode      Code muss noch mit CompleteDefToken eingetragen
  101.               werden.
  102.      Error = NoError      Alles in Ordnung    *)
  103.  
  104. PROCEDURE TokenToSymbol (voc: Vocabulary; VAR Error: TokenError):tIdent;
  105.   
  106.   (* liefert die zum TokenTabeintrag voc gehoerige Darstellung
  107.      in der Symboltabelle *)
  108.   (* Moegliche Fehler:
  109.      Error = NotExists      Es existiert ueberhaupt kein Eintrag
  110.               werden.
  111.      Error = NoError      Alles in Ordnung    *)
  112.  
  113. PROCEDURE GetTokenPos (voc: Vocabulary; VAR pos: PosType);
  114.   
  115.   (* liefert die zu 'voc' gehoerige Position 'pos' zurueck *)
  116.   
  117. PROCEDURE PutPrio (voc: Vocabulary; p: Prio);
  118.  
  119.   (* Setzen der Prioritaet von voc auf p *)
  120.  
  121. PROCEDURE GetPrio (voc: Vocabulary):Prio;
  122.  
  123.   (* liefert die mit PutPriority eingetragene Prioritaet von voc.
  124.      Ist nichts eingetragen, wird 0 zurueckgegeben. *)
  125.  
  126. PROCEDURE InitTokenTable;
  127.  
  128.   (* Initialisiere die TokenTab *)
  129.  
  130. END TokenTab.
  131.